package br.com.leilao.edital;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.junit.Assert;
import org.junit.Test;

import br.com.leilao.dao.EditalDAO;
import br.com.leilao.dao.ProdutoDao;
import br.com.leilao.filter.EditalFilter;
import br.com.leilao.model.Edital;
import br.com.leilao.model.Produto;
import br.com.leilao.util.ConstantsEditao;

public class EditalDAOTest {
	
	@Test
	public void findByTipoSELECIONE() throws Exception{
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,null,null,null,ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(2, lista.size());
}
	
	@Test
	public void findByTipoPRODUTO() throws Exception{
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.PRODUTO,null,null,null,ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(2, lista.size());
	}
	
	@Test
	public void findByTipoSERVICO() throws Exception {
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.SERVICO,null,null,null,ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(0, lista.size());
	}
	
	@Test
	public void findByTipoNome() throws Exception{
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,"teste",null,null,ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(1, lista.size());
	}
	
	
	@Test
	public void findByEditalAberto() throws Exception{
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,null,null,null,ConstantsEditao.ABERTO);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(1, lista.size());
	}
	
	@Test
	public void findByEditalFechado() throws Exception{
		EditalDAO dao = new EditalDAO();
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,null,null,null,ConstantsEditao.FECHADO);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(1, lista.size());
	}
	
	
	@Test
	public void findByEditalDataInicio() throws Exception{
		EditalDAO dao = new EditalDAO();
		
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,null,createDate(1, 1, 2013),null,ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(1, lista.size());
	}
	
	@Test
	public void findByEditalDataFim() throws Exception{
		EditalDAO dao = new EditalDAO();
		
		EditalFilter editalFilter = createFilter(ConstantsEditao.SELECIONE,null,null,createDate(1, 2, 2013),ConstantsEditao.SELECIONE);
		
		ArrayList<Edital> lista = dao.findAll(editalFilter);
		Assert.assertEquals(1, lista.size());
	}
	
	
	public EditalFilter createFilter(String tipo,String nome,Date dataInicio,Date dataFim,String estado){
		EditalFilter filter = new EditalFilter();
		filter.setTipo(tipo);
		filter.setNome(nome);
		filter.setEstado(estado);
		//filter.setDataInicio(dataInicio);
		//filter.setDataFim(dataFim);
		return filter;
	}
	
	public Date createDate(int day,int month,int year){
		GregorianCalendar calendario = new GregorianCalendar(year, month, day);
		
		System.out.print("Create Data:" +calendario.get(Calendar.DAY_OF_MONTH) + " - "+ calendario.get(Calendar.MONTH) + " - " + calendario.get(Calendar.YEAR));
		return calendario.getTime();
	}
	
	
	

}
